package com.boang.thread;

import java.util.concurrent.*;

/*
  @author: 13813
  @date: 2024/11/27 11:25
*/
public class CallableDemo implements Callable<String> {
    @Override
    public String call() throws Exception {
        Thread.sleep(3000); //30秒
        return "执行完成";
    }
}

class Test {
    public static void main(String[] args) throws ExecutionException, InterruptedException, TimeoutException {
        FutureTask futureTask = new FutureTask(new CallableDemo());

//        futureTask.run();

        // 创建一个单线程的执行器
        ExecutorService executor = Executors.newSingleThreadExecutor();

        // 提交任务给执行器
        executor.submit(futureTask);

//        Object obj = futureTask.get();

        try {
            // 设置超时时间为2秒，如果超过2没有获取结果，则抛异常
            Object result = futureTask.get(5, TimeUnit.SECONDS);
            System.out.println("任务成功完成，结果是: " + result);
        } catch (TimeoutException e) {
            // 任务在超时时间内没有完成
            System.err.println("任务超时");
        } finally {
            // 关闭执行器
            executor.shutdown();
        }
    }
}
